#include <SoftwareSerial.h>

// RS485 pins
#define RS485_RO 10
#define RS485_DI 11
#define RS485_RE 2
#define RS485_DE 3

#define RELAY_PIN 5
#define THRESHOLD 300

SoftwareSerial rs485(RS485_RO, RS485_DI); // RX, TX

String rxData = "";

void setup() {
  pinMode(RS485_RE, OUTPUT);
  pinMode(RS485_DE, OUTPUT);
  pinMode(RELAY_PIN, OUTPUT);

  // Start in receive mode
  digitalWrite(RS485_RE, LOW);
  digitalWrite(RS485_DE, LOW);

  digitalWrite(RELAY_PIN, LOW);

  Serial.begin(9600);
  rs485.begin(9600);

  Serial.println("RS485 RX Started");
}

void loop() {
  while (rs485.available()) {
    char c = rs485.read();

    if (c == '\n') {
      int value = rxData.toInt();
      rxData = "";

      Serial.print("Received: ");
      Serial.println(value);

      if (value >= THRESHOLD) {
        digitalWrite(RELAY_PIN, HIGH);
        Serial.println("Relay ON");
      } else {
        digitalWrite(RELAY_PIN, LOW);
        Serial.println("Relay OFF");
      }
    } else {
      rxData += c;
    }
  }
}
